const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
const bcrypt = require('bcryptjs');
const { db, initDB } = require('./database');

const app = express();

// 设置认证服务端口（与主服务区分开）
const PORT = process.env.AUTH_PORT || 3001;

// 中间件配置（必须放在路由前）
app.use(bodyParser.json());
app.use(cors());

// 欢迎页面
app.get('/', (req, res) => {
  res.json({
    service: '🔐 用户认证服务',
    status: '运行中',
    port: PORT,
    endpoints: [
      'POST /register - 用户注册',
      'POST /login - 用户登录'
    ],
    timestamp: new Date().toISOString(),
    documentation: '请使用POST请求访问上述端点'
  });
});

// 调试中间件（临时添加）
app.use((req, res, next) => {
  console.log(`[${new Date().toISOString()}] ${req.method} ${req.url}`);
  next();
});

// 异步启动函数
async function startServer() {
  try {
    await initDB();
    
    // 注册路由
    app.post('/register', async (req, res) => {
      try {
        console.log('注册请求body:', req.body); // 调试日志
        
        const { username, password } = req.body;
        
        if (!username || !password) {
          console.log('验证失败: 用户名或密码为空');
          return res.status(400).json({ error: '用户名和密码不能为空' });
        }

        const hashedPassword = bcrypt.hashSync(password, 10);
        
        db.run(
          'INSERT INTO users (username, password) VALUES (?, ?)',
          [username, hashedPassword],
          function (err) {
            if (err) {
              console.error('数据库错误:', err.message);
              if (err.message.includes('UNIQUE constraint failed')) {
                return res.status(409).json({ error: '用户名已存在' });
              }
              return res.status(500).json({ error: '注册失败' });
            }
            console.log('注册成功，用户ID:', this.lastID);
            res.status(201).json({ 
              success: true,
              userId: this.lastID 
            });
          }
        );
      } catch (err) {
        console.error('注册异常:', err);
        res.status(500).json({ error: '服务器错误' });
      }
    });

    // 登录路由
    app.post('/login', (req, res) => {
      console.log('登录请求body:', req.body); // 调试日志
      
      const { username, password } = req.body;
      
      db.get(
        'SELECT * FROM users WHERE username = ?',
        [username],
        (err, user) => {
          if (err) {
            console.error('登录查询错误:', err);
            return res.status(500).json({ error: '服务器错误' });
          }
          
          if (!user) {
            console.log('登录失败: 用户不存在');
            return res.status(401).json({ error: '用户名或密码错误' });
          }
          
          if (bcrypt.compareSync(password, user.password)) {
            console.log('登录成功，用户ID:', user.id);
            res.json({ 
              success: true,
              userId: user.id,
              username: user.username
            });
          } else {
            console.log('登录失败: 密码错误');
            res.status(401).json({ error: '用户名或密码错误' });
          }
        }
      );
    });

    // 启动服务器
    app.listen(PORT, () => {
      console.log(`🔐 认证服务运行在端口 ${PORT}`);
      console.log(`📡 本地访问: http://localhost:${PORT}`);
    });

  } catch (err) {
    console.error('启动服务器失败:', err);
    process.exit(1);
  }
}

// 启动服务
startServer();